import os
# from multiprocessing import Process
from multiprocessing import Pool
import time,random

# linux,unix进程
'''进程相关:Unix/Linux操作系统提供了一个fork()系统调用，它非常特殊。普通的函数调用，调用一次，返回一次，
但是fork()调用一次，返回两次，因为操作系统自动把当前进程（称为父进程）复制了一份（称为子进程），然后，分别在父进程和子进程内返回。'''
# print("进程%s开始" % os.getpid())
# pid=os.fork()
#
# if pid==0:
#     print("子进程%s,父进程%s" % os.getpid(),os.getppid())
# else:
#     print("这只是父进程创建了子进程%s" % os.getpid())

# python跨平台进程Process
# def run_proc(name):
#     print("子进程%s-%s" % (name,os.getpid()))
#
# if __name__=="__main__":
#     print("主进程执行%s" % os.getpid())
#     p=Process(target=run_proc,args=('test',))
#     p.start()
#     p.join()
#     print("子进程执行完毕")

def time_task(name):
    print("进程%s-%s" % (name,os.getpid()))
    start=time.time();
    time.sleep(random.random()*3)
    end=time.time()
    print("进程%s运行了%s s" % (name,end-start))

if __name__=="__main__":
    print("主进程%s" % os.getpid())
    p=Pool(5)
    for i in range(5):
        p.apply_async(func=time_task,args=(i,))
    print("等待所有进程终止...\n")
    p.close()
    p.join()
    print("所有进程终止")